/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package controladores;

import JPAControllers.FisioterapeutaJpaController;
import JPAControllers.LoginJpaController;
import JPAControllers.exceptions.IllegalOrphanException;
import JPAControllers.exceptions.NonexistentEntityException;
import JPAControllers.exceptions.PreexistingEntityException;
import Persistencia.Fisioterapeuta;
import Persistencia.Login;
import Persistencia.Tipousuario;
import Validadores.ValidarFecha;
import dominio.FisioterapeutaDomain;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Alith
 */
public class ControladorFisioterapeuta {
    Fisioterapeuta fisio;
    Login log;
    FisioterapeutaJpaController controlador;
    LoginJpaController controladorLogin;

    public String guardarFisioterapeuta(){
        String result="";
        try {
            fisio.setTipousuario(new Tipousuario("1"));
            fisio.setEstado("1");
            System.out.println(fisio);
            controlador = new FisioterapeutaJpaController();
            controladorLogin= new LoginJpaController();
            log = new Login();
            log.setLogin(fisio.getCedula());
            log.setContrasena(fisio.getCedula());
            controlador.create(fisio);
            log.setFisioterapeuta(fisio);                     
            controladorLogin.create(log);
            result="Se agrego exitosamente el fisioterapeuta con cedula: "+fisio.getCedula();
            return result;
        } catch (Exception ex) {
            Fisioterapeuta removido = buscarFisioterapeutaRemovido(fisio.getCedula());
            if(removido != null && removido.getEstado().equals("0")){
                System.out.println("removido "+removido);
                removido.setEstado("1");
                setFisioterapeuta(removido);
                modificarFisioterapeuta();
                result="Se reactivo exitosamente el fisioterapeuta con cedula: "+fisio.getCedula();
            }else{
                result="No se pudo agregar el fisioterapeuta con cedula: "+fisio.getCedula()+". No puede haber dos fisioterapeutas con la misma cedula";
            }
            return result;
        }
    }

    public void modificarFisioterapeuta(){
        controlador = new FisioterapeutaJpaController();
        try {
            controlador.edit(fisio);
        } catch (IllegalOrphanException ex) {
            System.out.println("noooo1");
            Logger.getLogger(ControladorFisioterapeuta.class.getName()).log(Level.SEVERE, null, ex);
        } catch (NonexistentEntityException ex) {
            System.out.println("noooo2");
            Logger.getLogger(ControladorFisioterapeuta.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            System.out.println("noooo3");
            Logger.getLogger(ControladorFisioterapeuta.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public List<Fisioterapeuta> encontrarFisioterapeutas(){
        controlador = new FisioterapeutaJpaController();
        List<Fisioterapeuta> fisios = controlador.findFisioterapeutaEntities();
        List<Fisioterapeuta> res = new ArrayList();
        for(int i=0;i<fisios.size();i++){
            if(fisios.get(i).getEstado().equalsIgnoreCase("1")){
                res.add(fisios.get(i));
            }
        }
        return res;
    }

    public List<Fisioterapeuta> encontrarCoordinadores(){
        controlador = new FisioterapeutaJpaController();
        List<Fisioterapeuta> fisios = encontrarFisioterapeutas();
        List<Fisioterapeuta> res = new ArrayList();
        for(int i=0;i<fisios.size();i++){
            if(fisios.get(i).getFisioterapeuta()==null){
                res.add(fisios.get(i));
            }
        }
        return res;
    }

    public Fisioterapeuta buscarFisioterapeuta(String id){
        Fisioterapeuta ob = null;
        List<Fisioterapeuta> obj = encontrarFisioterapeutas();
        System.out.println(obj);
        if(obj!=null){
            for(int i=0;i<obj.size();i++){
                if(id.equals(""+obj.get(i).getIdFisioterapeuta())){
                    ob = obj.get(i);
                }
            }
        }
        return ob;
    }

    public Fisioterapeuta buscarFisioterapeutaRemovido(String id){
        controlador = new FisioterapeutaJpaController();
        Fisioterapeuta ob = null;
        List<Fisioterapeuta> obj = controlador.findFisioterapeutaEntities();
        if(obj!=null){
            for(int i=0;i<obj.size();i++){
                if(id.equals(""+obj.get(i).getCedula())){
                    ob = obj.get(i);
                }
            }
        }
        return ob;
    }

    public Map<String, Object> listarCoordinador(String id){
        Fisioterapeuta ob = buscarFisioterapeuta(id);
        List<Fisioterapeuta> todos = encontrarFisioterapeutas();
        List<Fisioterapeuta> losMios = new ArrayList();
        List<Fisioterapeuta> losPosibles = new ArrayList();
        Map<String, Object> myModel = new HashMap<String, Object>();
        if(ob!=null){
            for(int i=0;i<todos.size();i++){
                if(ob.equals(todos.get(i).getFisioterapeuta())){
                    losMios.add(todos.get(i));
                }
            }
            for(int i=0;i<todos.size();i++){
                if(todos.get(i).getFisioterapeuta()==null){
                    if(todos.get(i).getIdFisioterapeuta()!=ob.getIdFisioterapeuta()&&todos.get(i).getFisioterapeutaList().isEmpty())
                        losPosibles.add(todos.get(i));
                }
            }
        }
        myModel.put("yo", ob);
        myModel.put("mios", losMios);
        myModel.put("posibles", losPosibles);
        return myModel;
    }

    public void asignarCoordinador(String mio, String el){
        Fisioterapeuta yo = buscarFisioterapeuta(mio);
        Fisioterapeuta suyo = buscarFisioterapeuta(el);
        suyo.setFisioterapeuta(yo);
        setFisioterapeuta(suyo);
        modificarFisioterapeuta();
        Tipousuario y = yo.getTipousuario();
        y.setIdTipo("2");
        yo.setTipousuario(y);
        setFisioterapeuta(yo);
        modificarFisioterapeuta();
    }

    public Login buscarLoginFisioterapeuta(String id){
        Login res = null;
        List<Fisioterapeuta> obj = encontrarFisioterapeutas();
        Fisioterapeuta ob = null;
        if(obj!=null){
            for(int i=0;i<obj.size();i++){
                if(id.equals(""+obj.get(i).getIdFisioterapeuta())){
                    ob = obj.get(i);
                }
            }
        }
        if(ob!=null){
            List<Login> logins = ob.getLoginList();
            if(!logins.isEmpty()){
                res = logins.get(0);
            }
        }
        return res;
    }

    public void eliminarFisioterapeuta(){
        try {
            controlador = new FisioterapeutaJpaController();
            fisio.setEstado("0");
            System.out.println("elimino virtualmente");
            controlador.edit(fisio);
        }catch (IllegalOrphanException ex) {

        }catch (NonexistentEntityException ex) {
            Logger.getLogger(ControladorFisioterapeuta.class.getName()).log(Level.SEVERE, null, ex);
        }catch (Exception ex){
            
        }
    }

    public void setFisioterapeuta(Fisioterapeuta in){
        fisio=in;
    }

    public void setFisioterapeuta(FisioterapeutaDomain in){
        Fisioterapeuta f = buscarFisioterapeutaRemovido(in.getCedula());
        if(f==null){
            f = new Fisioterapeuta();
        }
        f.setApellido(in.getApellido());
        f.setCedula(in.getCedula());
        f.setDireccion(in.getDireccion());
        f.setFechaNacimiento(in.getFechaNacimientoDia()+"/"+in.getFechaNacimientoMes()+"/"+in.getFechaNacimientoAno());
        f.setEdad(ValidarFecha.getEdad(f.getFechaNacimiento()));
        f.setNombre(in.getNombre());
        f.setSexo(in.getSexo());
        f.setTelefono(in.getTelefono());
        setFisioterapeuta(f);
    }

    public Fisioterapeuta encontrarFisioterapeuta(String idFisioterapeuta) {
        Fisioterapeuta f=new Fisioterapeuta();
        List<Fisioterapeuta> listaTodosFisioterapeuta=encontrarFisioterapeutas();
        for(int i=0;i<listaTodosFisioterapeuta.size();i++){
            if(listaTodosFisioterapeuta.get(i).getIdFisioterapeuta().intValue()==Integer.parseInt(idFisioterapeuta)){
                f=(listaTodosFisioterapeuta.get(i));
            }
        }
        return f;
    }

    public void actualizarEstadoCoordinador(Fisioterapeuta fisioterapeuta) {
        if(fisioterapeuta.getFisioterapeutaList().size()==1){
            Tipousuario y = fisioterapeuta.getTipousuario();
            y.setIdTipo("1");
            fisioterapeuta.setTipousuario(y);
            setFisioterapeuta(fisioterapeuta);
            modificarFisioterapeuta();
        }
    }

    public List<Fisioterapeuta> encontrarMisFisioterapeutas(String idFisio) {
        List<Fisioterapeuta> listaTodos=encontrarFisioterapeutas();
        List<Fisioterapeuta> res = new ArrayList();
        for(int i=0;i<listaTodos.size();i++){
            try{
                if(listaTodos.get(i).getFisioterapeuta().getIdFisioterapeuta()==Integer.parseInt(idFisio)){
                    res.add(listaTodos.get(i));
                    //listaTodos.remove(i);
                    //i--;
                }
            }catch(Exception e){
                //listaTodos.remove(i);
                //i--;
            }
        }
        return res;
    }

    public FisioterapeutaDomain convertirDomain(Fisioterapeuta buscarFisioterapeuta) {
        FisioterapeutaDomain f = new FisioterapeutaDomain();
        f.setIdFisioterapeuta(""+buscarFisioterapeuta.getIdFisioterapeuta());
        f.setApellido(buscarFisioterapeuta.getApellido());
        f.setCedula(buscarFisioterapeuta.getCedula());
        f.setDireccion(buscarFisioterapeuta.getDireccion());
        f.setFechaNacimiento(buscarFisioterapeuta.getFechaNacimiento());
        f.setNombre(buscarFisioterapeuta.getNombre());
        f.setSexo(buscarFisioterapeuta.getSexo());
        f.setTelefono(buscarFisioterapeuta.getTelefono());
        return f;
    }

    public void eliminarCoordinador(String id) {
        Fisioterapeuta ob = buscarFisioterapeuta(id);
        if(ob!=null){
            actualizarEstadoCoordinador(ob.getFisioterapeuta());
            ob.setFisioterapeuta(null);
            setFisioterapeuta(ob);
            modificarFisioterapeuta();
        }
    }
}
